# utils/email_utils.py
import yagmail
from utils.config_util import ConfigUtil
from utils.log_utils import log
import os
import glob


class EmailUtils:
    def __init__(self):
        # 从配置文件加载邮件配置
        self.config = ConfigUtil.get_email_config()
        self.host = self.config.get('host')
        self.sender = self.config.get('sender')
        self.port = self.config.get('port')
        self.password = self.config.get('password')
        self.receivers = self.config.get('receivers')
        self.logs_dir = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'logs')  # 日志目录
        self.allure_reports_dir = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'reports', 'allure_reports')  # Allure 报告目录

    def get_latest_log_file(self):
        """获取最新的日志文件"""
        log_files = glob.glob(os.path.join(self.logs_dir, '*.log'))
        if not log_files:
            return None
        # 按文件修改时间排序，获取最新的日志文件
        latest_log = max(log_files, key=os.path.getmtime)
        return latest_log

    def get_latest_allure_report(self):
        """获取最新的 Allure 报告（index.html）"""
        allure_report = os.path.join(self.allure_reports_dir, 'index.html')
        if os.path.exists(allure_report):
            return allure_report
        return None

    def send_email(self):
        """发送邮件，包含最新的日志文件"""
        try:
            # 获取最新的日志文件和allure报告
            latest_log = self.get_latest_log_file()
            latest_allure_report = self.get_latest_allure_report()
            if not latest_log and not latest_allure_report:
                log.error("没有找到日志文件和allure报告")
                return False

            # 初始化 yagmail
            mail = yagmail.SMTP(user=self.sender, password=self.password, host=self.host, port=self.port)

            # 邮件主题和内容
            subject = "测试报告"
            contents = [
                "测试报告已生成，请查收附件。",
                "最新日志文件："
            ]

            # 添加日志文件
            if latest_log:
                contents.append("最新日志文件：")
            contents.append(yagmail.inline(latest_log))

            # 添加Allure报告
            if latest_allure_report:
                contents.append("最新 Allure 报告：")
            contents.append(yagmail.inline(latest_allure_report))

            # 发送邮件
            mail.send(to=self.receivers, subject=subject, contents=contents)
            log.info("邮件发送成功")
            return True
        except Exception as e:
            log.error(f"邮件发送失败: {e}")
            return False